package org.example.operator.transform

import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}

/**
 * rdd的算子，也就是rdd的方法
 *
 * 扁平化
 */
object Spark04_RDD_Operator_FlatMap {
  def main(args: Array[String]): Unit = {

    val conf: SparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
    val context = new SparkContext(conf)

    val rdd: RDD[List[Int]] = context.makeRDD(
      List(List(1, 2), List(2, 3)))

    //想要将分别的集合中变成一个集合
    // flatMap 中的含义，意为，每个集合里的元素，这里就是List(1,2)
    val flatRdd: RDD[Int] = rdd.flatMap(list =>
      // 两个list不是一个含义，作为返回的list，是对List(1,2)作为集合的封装返回由于里面已经是封装结果，所以直接返回
      list)

    // 一个练习
    val rddExper = context.makeRDD(List(List(1,2),3,List(4,5)))
    // 将上面扁平化
    rddExper.flatMap(data=>{
      data match {
        case list:List[_] => list
        case dat => List(dat)
      }
    })

    flatRdd.collect().foreach(println)

    context.stop();  }
}
